<?php
namespace Admin\Controller;
use Think\Controller;
class AdminController extends CommonController {


// 动态实例化类对象:$this->Model，可以替换D('admin')

    /**
     * 管理员登录
     *
     * @return void
     * @author
     **/
    public function login(){

        //是否登录
        // if (IS_POST) {
        //     // $admin = D("admin"); // 实例化admin对象
        //     // 查找status值为1name值为think的用户数据

        //     $name=I('post.name');
        //     $pass=I('post.pass');
        //     $validation['name']=$name;
        //     $adminInfo=$this->Model->where($validation)->select();
        //     //判断验证码输入是否正确
        //     //I('post.code')为用户输入的验证码字符串
        //     $verify = new \Think\Verify();
        //     // echo I('post.code');die;
        //     if (!$verify->check(I('post.code'))) {
        //         $this->error('验证码错误，请重新输入','',2);die;
        //     }
        //     if (0==count($adminInfo[0])) {
        //         $this->error('登陆失败，不存在此用户名','',3);die;
        //     }
        //     else if($pass!=$adminInfo[0]['pass']||$name!=$adminInfo[0]['name']){
        //        // echo $pass;die;
        //             $this->error('登录失败',U('admin/login'),3);die;
        //     }else{
        //         $this->error('登录成功，正在跳转。。。',U('nav/lists'),3);die;
        //     }

        // }

        //或者也可以这样写：
        if (IS_POST) {
             $data=$this->Model->relation(true)->where(I('post.'))->find();
            // print_r($data);die;
            if (!empty($data)) {

                //字符串转换成数组
                $data['group_access']=explode(',',$data['group_access'][0]['rules']);
                // print_r($data);die;

                session('admin_user',$data);
                redirect(U('index/index',2));die;//重定向形式实现页面跳转
            }else{
                redirect('',2);die;
            }
        }

        $this->display();
    }
    /**
     * 设置验证码，详见手册
     *
     * @return void
     * @author
     **/
    //生成的验证码信息会保存到session中
    function getCode()
    {
        $Verify = new \Think\Verify();
        $Verify->fontSize = 15;// 验证码字体大小
        $Verify->length   = 4;// 验证码位数
        // $Verify->fontttf = '5.ttf';//// 验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
        // $Verify->useImgBg = true;//开启验证码背景图片功能 随机使用 ThinkPHP/Library/Think/Verify/bgs 目录下面的图片

        //如果无法正常显示，请确认你的 ThinkPHP/Library/Think/Verify/zhttfs/ 目录下面存在中文字体文件。
        //$Verify->useZh=true;//验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf

        $Verify->useNoise = false;// 关闭验证码杂点
        $Verify->imageW = 150;// 验证码宽度 设置为0为自动计算
        $Verify->imageH = 30;// 验证码高度 设置为0为自动计算
        //ob_clean();//清除缓存，以防验证码有时候不显示
        $Verify->entry();
    }


    /**
     * 注册
     *
     * @return void
     * @author
     **/
    function register()
    {
         // $admin=D('admin');
        //检测是否post提交
        if(IS_POST){
            // $id=$admin->add(I('post.'));
            $id=$this->Model->add(I('post.'));
             //语句添加成功，返回添加的数据id
             if ($id) {
                 $this->success('注册成功',U('admin/login'),3);die;
             }else{
                $this->error('注册失败',U('admin/register'),3);die;
             }
        }
        $this->display();
    }



    /**
     * 管理员列表
     *
     * @return void
     * @author
     **/
    function lists()
    {
        // $admin=D('admin');//实例化对象
        // $count=$admin->count();//查询满足要求的总记录数
        $count=$this->Model->count();//查询满足要求的总记录数
        $Page=new \Think\Page($count,5);//
        $Page->setConfig('prev','上一页');//上一页
        $Page->setConfig('last','尾页');//尾页

        $show=$Page->show();// 输出分页显示

        // $list = $admin->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();
        $list = $this->Model->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();

// print_r($list);die;

        $this->assign('list',$list);// 赋值数据集
       // print_r($list);die;
        $this->assign('page',$show);// 赋值分页输出

        $this->display(); // 输出模板
    }



    /**
     * 添加管理员
     *
     * @return void
     * @author
     **/
    function add()
    {
        // $admin=D('admin');//实例化要操作的表

        //检测是否post提交
        if(IS_POST){

            //添加的时候调用文件上传方法
            //$_POST['adminPic']上传的图片付给post里的name为adminPic的字段
            //实现将图片保存到数据库
            $_POST['pic']=$this->upload();

            // $admin->add($_POST);//调用要添加的语句
            // print_r($_POST);die;
            // $admin->add(I('post.username',0));//当username没有值，默认返回0
            // $id=$admin->add(I('post.'));


            unset($_POST['cPass']);//数据库admin中不存在的字段要去掉
            $data['group_id']=$_POST['group_id'];//获取post提交上来的角色id
            unset($_POST['group_id']);
            unset($_POST['code']);


            // print_r(I('post.'));die;

            //添加员工
            $id=$this->Model->add(I('post.'));

            //角色表添加数据
            $data['uid']=$id;
            D('group_access')->add($data);

             if ($id>0) {
                 $this->success('添加成功',U('Admin/admin/lists'),2);die;
             }else{
                $this->error('添加失败','',3);die;
             }
        }

          //查询角色
        $group=D('group')->select();
        $this->assign('group',$group);

        $this->display();
    }

    /**
     * 文件上传
     *
     * @return void
     * @author
     **/
    public function upload(){
        $upload = new \Think\Upload();// 实例化上传类
        $upload->maxSize   =     3145728 ;// 设置附件上传大小
        $upload->exts   =   array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型

        //需在根目录下手动创建Uploads文件夹，执行之后，会自动在该文件夹下创建：public/Uploads,用来保存上传的图片
        // $upload->savePath  = './Public/Uploads/'; // 设置附件上传目录
        $upload->savePath  = ''; // 设置附件上传目录

        // 上传文件
        // 单文件上传：$upload->uploadOne()
        // 多文件上传：$upload->upload()
        // print_r($_FILES['file']);die;

         $info   =   $upload->uploadOne($_FILES['file']);
        // print_r( $info);die;

        if(!$info) {// 上传错误提示错误信息
            $this->error($upload->getError());
        }else{// 上传成功

            //上传成功的图片路径
           return 'Uploads/'.$info['savepath'].$info['savename'];
           // echo 1;die;
            // $this->success('上传成功！');
        }
   }



    /**
     * 员工信息编辑
     *
     * @return void
     * @author
     **/
    function edit()
    {
        //查询数据，将其绑定到页面显示
        $data=D('admin')->getByid(I('get.id'));
        $this->assign('data',$data);

        // // 修改执行
        // if (IS_POST) {
        //      //实现将图片保存到数据库
        //     $_POST['pic']=$this->upload();
        //     //需要修改的字段
        //     $map['id']=I('get.id');
        //     $data['pic']=$_POST['pic'];
        //     $data['name']=$_POST['name'];
        //     $data['realname']=$_POST['realname'];
        //     $data['email']=$_POST['email'];
        //     $data['qq']=$_POST['qq'];
        //     $data['tel']=$_POST['tel'];
        //     $data['addre']=$_POST['addre'];
        //     $id=D('admin')->where($map)->save($data); // 根据条件更新记录
        //     if ($id>0) {
        //         $this->success('信息修改成功',U('Admin/admin/lists'),2);die;
        //     }else{
        //         $this->error('信息修改失败','',2);die;
        //     }
        // }

        // 或者也可以这样写
        if (IS_POST) {
           //  echo $this->Model->getLastSql();die;

            //修改的第一种方式：单表操作
            $id=I('get.id');
            // print_r(I('get.id'));die;
             //把角色id独立取出来
            $data['group_id']=I('post.group_id');
            //把角色id删除掉（因为admin表中没有gruop_id字段），这时就可以修改员工信息
            unset($_POST['group_id']);

            //上传图片
            if (!empty($FILES['file'])) {
                $_POST['pic']=$this->upload();
            }
            //修改员信息
            $this->Model->where("id=$id")->save(I('post.'));
            //修改员工角色表信息
            $row=D('group_access')->where("uid=$id")->save($data);

              // echo $this->Model->getLastSql();die;

            //修改的第二种方式：多对多联表操作:没成功
            // print_r(I('post.'));die;
            // $id=I('get.id');
            // $_POST['id']=$id;
            // // print_r($_POST);die;
            //  //把角色id独立取出来
            // $data['group_id']=I('post.group_id');
            // //把角色id删除掉（因为admin表中没有gruop_id字段），这时就可以修改员工信息
            // unset($_POST['group_id']);

            // //上传图片
            // if (!empty($FILES['file'])) {
            //     $_POST['pic']=$this->upload();
            // }
            // //修改员信息
            // $row=$this->Model->relation(true)->where("id=$id")->save(I('post.'));


            if ($row>0) {
                $this->success('信息修改成功',U('Admin/admin/lists'),2);die;
            }else{
                $this->error('信息修改失败','',2);die;
            }
        }

         //查询角色
        $group=D('group')->select();
        $this->assign('group',$group);

        // print_r($group);die;


        $this->display();
    }


    /**
     * 删除图片
     *
     * @return void
     * @author
     **/
    function del_pic()
    {
        //先查询要删除的数据
        $data=D('admin')->getByid(I('get.id'));

        //更新数据
        $map['id']=I('get.id');

        // $filed['pic']='';//清空对应数据的头像
        // $id=D('admin')->where($map)->save($filed);
        // 或者
        //修改一个字段，设置pic的值为空，条件为$map
        $id=D('admin')->where($map)->setField('pic','');

        //数据修改成功则去删除头像文件
        if ($id>0) {
            //删除制指定路径下的文件
            unlink('./'.$data['pic']);
            //删除了之后还要回到edit()里面重新取数据显示
            // echo $data['id'];die;
            // 之前出现了一个错误：Admin/admin/edit/id中id后面少了/，因此路径不对
            $this->success('头像删除成功',U('Admin/admin/edit/id/'.$data['id']),2);die;
        }else{
            $this->error('头像删除失败','',2);die;
        }
    }



    /**
     * 删除管理员
     *
     * @return void
     * @author
     **/
    function del()
    {
        $id=I('get.id');
        // print_r($id);die;
        $row=$this->Model->where("id=$id")->delete();
        if ($row>0) {
            $this->success('删除成功',U('admin/lists',2));die;
        }else{
            $this->error('删除失败','',2);die;
        }
    }

}